Pular para o conteúdo principal

05 - Dockerfile - Comandos usados

Comandos

Criar imagem

Comando para criar a imagem, e recomendado que o docker file seja colocado numa pasta separada junto com os arquivos que vão compor a imagem.

docker build -t="tag-name" <path-diretorio>

#ex:
docker build -t="uniserver" .

FROM

Indica a imagem base para criação

FROM <so-linux>:<versão>

#ex
FROM ubuntu:18.04

MAINTAINER

Informa que é o responsavel pela imagem (opcional)

MAINTAINER <email>

#ex:
MAINTAINER uniliva@gmail.com

RUN

Serve parar executar comando de instalação na imagem. (cada run cria uma nova camada (sobe o container, executa o comando, para o container, commita as mudancas e sobre o container de novo e refaz o procssso para cada RUN ))

RUN <comando de isntalação>

#ex
RUN apt-get update
RUN apt-get install -y vim
#limpa o cache do apt
RUN apt-get clean

ENTRYOINT

ENTRYPOINT ["echo"]

Usado para definir o que vai ser executado, semelhante ao CMD, porém o CMD abre a porta para que qualquer ultima instrução que seja passada ao final do comando RUN sobrescreva o comando do CMD. já o entrypoint indica qual item vai ser executado e qualquer informação que venha ao final do comando RUN vai ser considerado um argumento

E comum utilizar o ENTRYPOINT para definir o processo pricip ae o CMD pra informar os paramentos, e caso passamos algum parametro no RUN ele sobscreve o CDM

#ex
ENTRYPOINT ["apache2ctl"]
CMD ["-D", "FOREGROUND"]

CMD

Serve pra executar um comando dentro da imagem

CMD ["<programa>", "<paramentros>", "<outros parametros>"]

#ex
CMD ["echo", "HELLO WORLD"]
CMD ["apache", "-D" "FOREGROUND"]
  • Só deve haver um unico CMD no Dockerfiles, pois só será executado o ultimo.

O CMD de tempo de execução, é usado semalhante a execução ao execução no terminal

Forma de montagem do comando

  • Opte por usar o Exec form, que foi demonstrado no inicio


EXPOSE

Serve para especificar a porta em que o container vai executar, caso não seja especificado na execução do container.

EXPOSE <porta>

#ex
EXPOSE 80
EXPOSE 80 85 8090

ENV

Serve para definir variavies de ambiente para o container.

ENV <variavel1>=<valor> <variavel2>=<valor2>

#ex
ENV var1=Uniliva var2=Alves

Volumes

Serve para mapear um diretorio da maquina host dentro de um container, para deixar apartado os dados da aplicação.

#Lista os comando do volume
docker volumes

#lista os volumes exitentes
docker volumes ls

## Cria um volume
VOLUME <path-in_container>

#ex
VOLUME /opt/web/unisite
  • Não é possivel linkar um pasta do host hospediero com o container via dockerfile, somente via RUN

WORKDIR

Serve para idicar qual e o diretorio onde o bash vai carregar, o diretorio de trabalho

## Indica qual é diretorio de trabalho
WORKDIR <path-in_container>

#ex
WORKDIR /opt/web/unisite
  • O diretorio deve existir, antes do WORKDIR

ADD ou COPY

ADD <Origem> <destino>
ADD app/target/docker-from-zero-to-mastery-0.0.1-SNAPSHOT.jar app.jar




Boas praticas

Ao criar Dockerfiles é sempre bom se preocupar com a quantidade de camadas pois cada linha de comando dockerfile gera uma camada

Assim opter por exemplo por algo do tipo:

#Simple Udemy Web Server
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y \
apache2 \
apache2-utils \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]

Ao invés de :

#Simple Udemy Web Server
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y apache2
RUN apt-get install -y apache2-utils
RUN apt-get install -y vim
RUN apt-get clean
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]